package com.zhiyou.app.common.util;

import cn.hutool.core.util.StrUtil;

import java.util.HashSet;
import java.util.Set;

public class UrlFileTypeChecker {
    // 常见图片文件扩展名
    private static final Set<String> IMAGE_EXTENSIONS = new HashSet<>();
    // 常见音频文件扩展名
    private static final Set<String> AUDIO_EXTENSIONS = new HashSet<>();

    static {
        // 初始化图片扩展名集合
        IMAGE_EXTENSIONS.add("jpg");
        IMAGE_EXTENSIONS.add("jpeg");
        IMAGE_EXTENSIONS.add("png");
        IMAGE_EXTENSIONS.add("gif");
        IMAGE_EXTENSIONS.add("bmp");
        IMAGE_EXTENSIONS.add("webp");
        IMAGE_EXTENSIONS.add("svg");
        IMAGE_EXTENSIONS.add("tiff");

        // 初始化音频扩展名集合
        AUDIO_EXTENSIONS.add("mp3");
        AUDIO_EXTENSIONS.add("wav");
        AUDIO_EXTENSIONS.add("flac");
        AUDIO_EXTENSIONS.add("aac");
        AUDIO_EXTENSIONS.add("ogg");
        AUDIO_EXTENSIONS.add("wma");
        AUDIO_EXTENSIONS.add("m4a");
    }

    /**
     * 从URL中提取文件扩展名
     *
     * @param url 资源URL
     * @return 文件扩展名（小写），无扩展名则返回空字符串
     */
    public static String getFileExtension(String url) {
        if (StrUtil.isBlank(url)) {
            return "";
        }

        String urlWithoutParams = url;
        if (url.contains("?")) {
            urlWithoutParams = url.substring(0, url.indexOf("?"));
        }
        // 提取文件名
        String fileName = StrUtil.subAfter(urlWithoutParams, "/", true);

        // 提取扩展名
        int dotIndex = fileName.lastIndexOf('.');
        if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
            return fileName.substring(dotIndex + 1).toLowerCase();
        }

        return "";
    }

    /**
     * 判断URL对应的文件是否为图片（通过扩展名）
     *
     * @param url 资源URL
     * @return 是否为图片
     */
    public static boolean isImageByUrlPath(String url) {
        String extension = getFileExtension(url);
        return IMAGE_EXTENSIONS.contains(extension);
    }

    /**
     * 判断URL对应的文件是否为音频（通过扩展名）
     *
     * @param url 资源URL
     * @return 是否为音频
     */
    public static boolean isAudioByUrlPath(String url) {
        String extension = getFileExtension(url);
        return AUDIO_EXTENSIONS.contains(extension);
    }
}

